package com.company;

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
	// 输入一个数字，计算从1至该数字，match （3n+1) 猜想的 本福特定律。
        System.out.println("输入一个数字：");
        Scanner in = new Scanner(System.in); int i = in.nextInt();
        int totalarr[] =new int[10];
        System.out.println("yout input is:"+i);

        for (int j=1;j <i;j++ ){
        totalarr=arrplus(totalarr,numbs(j));

        System.out.println("1 over:"+ arrsci(totalarr)[1]);
        }
        System.out.println("totalarr:"+ Arrays.toString(totalarr));
        System.out.println("arr-sci:"+ Arrays.toString(arrsci(totalarr)));

    }

    public static int[] count (int i) { //定义count 函数，作用于0~9 数字统计
        int outArry[] = new int[10]; //定义对外return 数组，存放0~9数字统计
        int zer = 0, fir = 0, sec = 0, thi = 0, fou = 0, fiv = 0, six = 0, sev = 0, eig = 0, nin = 0;
        String si = Integer.toString(i);
        char tempArray[] = si.toCharArray();
        for (int j = 0; j < tempArray.length; j++) {
            if (tempArray[j] == '0') {
                zer++;
            } else if (tempArray[j] == '1') {
                fir++;
            } else if (tempArray[j] == '2') {
                sec++;
            } else if (tempArray[j] == '3') {
                thi++;
            } else if (tempArray[j] == '4') {
                fou++;
            } else if (tempArray[j] == '5') {
                fiv++;
            } else if (tempArray[j] == '6') {
                six++;
            } else if (tempArray[j] == '7') {
                sev++;
            } else if (tempArray[j] == '8') {
                eig++;
            } else {
                nin++;
            }
        }

        outArry[0] = zer;
        outArry[1] = fir;
        outArry[2] = sec;
        outArry[3] = thi;
        outArry[4] = fou;
        outArry[5] = fiv;
        outArry[6] = six;
        outArry[7] = sev;
        outArry[8] = eig;
        outArry[9] = nin;
        // return  new int outArry[]{zer,fir,sec,thi,fou,fiv,sev,eig,nin};
        return outArry;
    }
    public static int[] numbs(int i){
        int arrtemp[] =new int[10]; //定义一个临时数组，用于存放循环计算0~9数字个数
        arrtemp=arrplus(arrtemp,count(i)); //0~9数字累计
        //System.out.println("start cal number is:"+i);
       // System.out.println("arrtemp:"+ Arrays.toString(arrtemp));
        int step=0; //用于统计 计算次数
        while (i > 1){
        i=i*3+1;   //算法3i+1
        step++;
        arrtemp=arrplus(arrtemp,count(i)); //0~9数字累计
        //System.out.println("n*3+1= "+i);
        while ( i % 2 == 0 ) //偶数判断
        {
            i=i/2; //偶数则 /2
            step++;
            arrtemp=arrplus(arrtemp,count(i)); //0~9数字累计
        //    System.out.println("n/2 = "+i);
        }
    }
        return arrtemp;
    }

    // arrplus 函数用于2个数组相加。
    public static int[] arrplus(int[]a,int[]b){
        int[] c =new int[10];
        for (int i=0;i<10;i++){
            c[i]=a[i]+b[i];
        }
        return c;
    }

    // arrsci用于统计 0~9数组中占比。

    public static double[] arrsci(int []a ){
        double[] n =new double[10];
        int arrsum=0;  //求和数组中的总数
        for (int i=0;i<10;i++){
            arrsum=arrsum+a[i];
        }
        for (int i=0;i<10;i++){
            n[i]=(float)a[i] / arrsum;  //计算0~9 分别占比
        }
        return n;

    }




}
